package test;

import test.bean.TreeNode;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class GenerateTree {
    public static void main(String[] args) {
        Set<TreeNode> set = createSomeTree();
        Map<String,TreeNode> map = generateMap(set);
        generateTree(map);
//        System.out.println(map.get(1));
        TreeNode t1 = map.get(1);

    }
    private static Set<TreeNode> createSomeTree(){
        Set<TreeNode> set = new HashSet<>();
        TreeNode t1 = new TreeNode();
        t1.setId(1);

        TreeNode t2 = new TreeNode();
        t2.setId(2);
        t2.setParentId(1);

        TreeNode t3 = new TreeNode();
        t3.setId(3);
        t3.setParentId(1);

        TreeNode t4 = new TreeNode();
        t4.setId(4);
        t4.setParentId(2);

        set.add(t1);
        set.add(t2);
        set.add(t3);
        set.add(t4);
        return set;
    }

    /**
     * 将每个TreeNode对象放在map里将来 挂树的时候好取
     * @param set
     */
    private static Map<String,TreeNode> generateMap(Set<TreeNode> set){
        Map map = new HashMap<>();
        for(TreeNode node : set){
            map.put(node.getId(),node);
        }
        return map;
    }

    private static <T extends TreeNode> void generateTree(Map<String, T> treeMap){
        for(TreeNode node : treeMap.values()){

            Integer parentId = node.getParentId();
            if(parentId==null){
                continue;
            }
            if(treeMap.get(parentId)!=null){
                TreeNode parentNode = treeMap.get(parentId);
                node.setParentNode(parentNode);
                parentNode.addChildNode(node);
            }
        }
    }
}